package com.study.controller;

import org.springframework.amqp.core.Message;
import org.springframework.amqp.core.MessageProperties;
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

import java.nio.charset.StandardCharsets;

@RestController
@RequestMapping("/simpleProducer")
public class SimpleProducer {
    //注入模板
    @Autowired
    private RabbitTemplate rabbitTemplate;

    @GetMapping("/simple")
    public void execute(@RequestParam String data){

        //MessageProperties: 消息属性。MessageProperties提供了很多方法来对消息的属性进行设置
        MessageProperties messageProperties = new MessageProperties();
        //设置消息类型为文本: text/plain
        messageProperties.setContentType(MessageProperties.CONTENT_TYPE_TEXT_PLAIN);

        //消息对象
        Message message = new Message(data.getBytes(StandardCharsets.UTF_8), messageProperties);

        /**
         * convertAndSend()：将指定的消息对象转换为 AMQP 消息并发送到指定的交换机，支持通过指定的路由键进行消息路由。
         *  1.三个参数从左往右依次为交换机、路由键、消息对象
         *  2.在使用简单、工作、广播模式时不需要指定交换机，使用的是默认的交换机(AMQP default)，
         *     路由键处填写队列名即可(会自动匹配队列)
         *  3.direct、topic等模式则填写对应的交换机和路由键
         * */
        rabbitTemplate.convertAndSend("","simple_queue",message);
    }

    @GetMapping("/getAgentInfo")
    public String getAgentInfo() {
        return "hello world";
    }
}

